﻿using ConfExpert.Forms.Base;
using ConfExpert.Properties;

using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Grid;
using DevTeam;

using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;

namespace ConfExpert.Forms.Depo
{
    public partial class AtilKumas : XForm
    {
        public AtilKumas()
        {
            InitializeComponent();
            this.Text = "Son x aydır hareketsiz toplar";
        }

        List<int> lstCust;
        private void AtilKumas_Load(object sender, EventArgs e)
        {
            lstCust = new List<int>();
            DataTable dtCust = ExecuteDataTable("GetMyCustomers", WhoAmI);
            foreach (DataRow r in dtCust.Rows)
                lstCust.Add(r["CustomerId"].ToInt());

            txtOran.EditValue = 0.97;
            txtSonXAy.EditValue = 6;
            gridView1.Init("GetAtilKumas", txtOran.EditValue.ToDecimal(), txtSonXAy.EditValue.ToDecimal(), false);
            gridView1.AddDetailGrid(gridView2, "CustomerId");

            gridView1.Columns["AtilQty"].ToolTip = "Atıl olabilecek maksimum miktar";
            gridView1.Columns["AtilOran"].ToolTip = "Deposundaki topların ne kadarı sağdaki listede?";
            gridView2.Columns["Atil"].ToolTip = "Bu artikelin toplarının ne kadarı atıl olarak işaretli?";
            gridView2.Columns["Yas"].ToolTip = "Kumaşın yıl cinsinden yaş hesabı";
            gridView2.MakeColumnInvisible("CustomerId");
            gridView1.FormatAsNumber(1, "AtilQty");
            gridView1.FormatAsPercentage("AtilOran");
            gridView1.AddSummary("AtilQty");

            gridView2.FormatAsNumber(1, "Qty", "Yas");
            gridView2.FormatAsPercentage(0, "Atil");
            gridView2.AddSummary("Qty");
            gridView2.SetCaptions("Yas:Yaş (yıl cinsinden)");

            barButtonItem1.ItemClick += barButtonItem1_ItemClick;
            chk.CheckedChanged += chk_CheckedChanged;

            gridView1.MakeReadOnly();
            gridView2.MakeReadOnly();

            GridMenu gm = GridManager.GetManager(gridView2).GridMenu;
            gm.AddMenu("Atıl olarak işaretle", AtilYap, Resources.Plus_16x16);
            gm.AddMenu("Atıl işaretini kaldır", AtildanCikar, Resources.Minus_16x16);

            //gridFormatRule = new GridFormatRule();
            //FormatConditionRuleDataBar formatConditionRuleDataBar = new FormatConditionRuleDataBar();
            //gridFormatRule.Column = gridView2.Columns["Atil"];
            //formatConditionRuleDataBar.PredefinedName = "Yellow Gradient";
            //gridFormatRule.Rule = formatConditionRuleDataBar;
            //gridView2.FormatRules.Add(gridFormatRule);

            gridView1.FocusedRowChanged += gridView1_FocusedRowChanged;
            gridView2.RowCellStyle += gridView1_RowCellStyle;

            gridView1.BestFitColumns();
            gridView2.BestFitColumns();
        }

        void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            gridView2.BestFitColumns();
        }

        void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (e.RowHandle > -1)
                switch (e.Column.FieldName)
                {
                    case "Qty":
                        e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
                        return;
                }
        }

        int CustomerId = 0;
        private void AtilYap(object sender, EventArgs e)
        {
            gridView2.EndEditing();
            CustomerId = gridView1.GetFocusedDataRow()["CustomerId"].ToInt();
            string ProductIds = gridView2.GetSelectedValues("ProductId");

            if (ProductIds == string.Empty)
            {
                ShowInfoMessage("Lütfen atıl olarak işaretlemek istediğiniz kumaşları seçiniz.");
                return;
            }

            if (!lstCust.Contains(CustomerId))
            {
                XtraMessageBox.Show("Yetkilisi olmadığınız müşterinin kumaşını atıla atamazsınız.", "Hata");
                return;
            }

            switch (ExecuteScalar("CheckAtilDepoyaAt_P", CustomerId, ProductIds).ToInt())
            {
                case 2:
                    using (AtilDepoyaAt a = new AtilDepoyaAt(CustomerId, ProductIds))
                        if (a.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                            Rfrsh();
                    break;

                case 1:
                    XtraMessageBox.Show("Atıl toplar yeniden atıl olarak işaretlenemez. Böyle toplar listeden çıkarıldı.");
                    using (AtilDepoyaAt a = new AtilDepoyaAt(CustomerId, ProductIds))
                        if (a.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                            Rfrsh();
                    break;

                default:
                    XtraMessageBox.Show("Seçilen topların tümü zaten atıl olarak işaretli!");
                    break;
            }
        }

        private void AtildanCikar(object sender, EventArgs e)
        {
            gridView2.EndEditing();
            CustomerId = gridView1.GetFocusedDataRow()["CustomerId"].ToInt();
            string ProductIds = gridView2.GetSelectedValues("ProductId");

            if (ProductIds == string.Empty)
            {
                ShowInfoMessage("Lütfen atıldan çıkarmak istediğiniz kumaşları seçiniz.");
                return;
            }

            if (!lstCust.Contains(CustomerId))
            {
                XtraMessageBox.Show("Yetkilisi olmadığınız müşterinin kumaşını atıldan çıkaramazsınız.", "Hata");
                return;
            }

            ExecuteNonQuery("UpdAtilDepodanCikar", CustomerId, ProductIds, WhoAmI);
            Rfrsh();
        }


        void chk_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Rfrsh();
        }

        private void Rfrsh()
        {
            if (chk.Checked)
            {
                splitContainerControl1.PanelVisibility = DevExpress.XtraEditors.SplitPanelVisibility.Panel1;
                gridView1.Init("GetAtilKumas", txtOran.EditValue.ToDecimal(), txtSonXAy.EditValue.ToDecimal(), true);
                gridView1.FormatAsNumber(1, "Qty", "Yas");
                gridView1.FormatAsPercentage(0, "Atil");
                gridView1.AddSummary("Qty");
                gridView1.BestFitColumns();
            }
            else
            {
                splitContainerControl1.PanelVisibility = DevExpress.XtraEditors.SplitPanelVisibility.Both;
                gridView1.Init("GetAtilKumas", txtOran.EditValue.ToDecimal(), txtSonXAy.EditValue.ToDecimal(), false);
                gridView1.AddDetailGrid(gridView2, "CustomerId");
                gridView2.MakeColumnInvisible("CustomerId");
                gridView1.FormatAsNumber(1, "AtilQty");
                gridView1.FormatAsPercentage("AtilOran");
                gridView1.AddSummary("AtilQty");

                gridView2.FormatAsNumber(1, "Qty", "Yas");
                gridView2.FormatAsPercentage(0, "Atil");
                gridView2.AddSummary("Qty");
                gridView1.BestFitColumns();
                gridView2.BestFitColumns();
            }

            gridView1.Columns["AtilQty"].ToolTip = "Atıl olabilecek maksimum miktar";
            gridView1.Columns["AtilOran"].ToolTip = "Deposundaki topların ne kadarı sağdaki listede?";
            gridView2.Columns["Atil"].ToolTip = "Bu artikelin toplarının ne kadarı atıl olarak işaretli?";
            if (CustomerId > 0)
            {
                gridView1.FocusedRowHandle = gridView1.LocateByValue("CustomerId", CustomerId);
                gridView1.MakeRowVisible(gridView1.FocusedRowHandle);
            }
        }

        //void bbiKaydet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        //{
        //    gridView1.EndEdit();
        //    gridView2.EndEdit();
        //    int CustomerId = gridView2.GetFocusedRowCellValue("CustomerId").ToInt();
        //    string s = gridView2.SerializeChanges();
        //    if (s != string.Empty)
        //    {
        //        ExecuteNonQuery("UpdAtilKumas", s);
        //        gridView2.FocusedRowHandle = gridView2.LocateByValue("CustomerId", CustomerId);
        //        gridView2.BestFitColumns();
        //    }
        //}

        void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            Rfrsh();
        }
    }
}
